package com.unju.hibernate.patronDAO.imp;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.criterion.Restrictions;
import com.unju.hibernate.HibernateBase;
import com.unju.hibernate.entidades.Usuario;
import com.unju.hibernate.patronDAO.PatronDAO;

public class UsuarioDAOImp extends HibernateBase implements PatronDAO<Usuario> {

	public Usuario validarAcceso(String nombreUsuario, String clave) {
		Criteria criteria = getSession().createCriteria(Usuario.class);		
		criteria.add(Restrictions.eq("nombreUsuario",nombreUsuario));
		criteria.add(Restrictions.eq("clave",clave));
		criteria.add(Restrictions.eq("estado",true));		
		return (Usuario) criteria.uniqueResult();
	}
	@Override
	public List<Usuario> getAll() {
		getSession().beginTransaction();		
		List<Usuario> lista=getSession().createCriteria(Usuario.class).list();
		for(Usuario l: lista){
			   Hibernate.initialize(l.getResponsable());
			   Hibernate.initialize(l.getPerfil());
			  }
        getSession().getTransaction().commit();
        getSession().close();					
		return  lista;
	}

	@Override
	public Usuario get(Integer idDato) {
		getSession().beginTransaction();
		Usuario u=(Usuario)getSession().get(Usuario.class, idDato);
        getSession().getTransaction().commit();
        getSession().close();
		return u;
	}

	@Override
	public void insert(Usuario unDato) {
		getSession().beginTransaction();
        getSession().save(unDato);
        getSession().getTransaction().commit();
        getSession().close();		
	}

	@Override
	public void update(Usuario unDato) {
		getSession().beginTransaction();
		getSession().update(unDato);        
        getSession().getTransaction().commit();
        getSession().close();		
	}

	@Override
	public void delete(Usuario unDato) {
		getSession().beginTransaction();
		getSession().delete(unDato);     
        getSession().getTransaction().commit();
        getSession().close();			
	}
	public List<Usuario> getFindNameUser(String criterio) {
		getSession().beginTransaction();
		Criteria criteria = getSession().createCriteria(Usuario.class);
        if(!criterio.isEmpty())
            criteria.add(Restrictions.like("nombreUsuario", "%"+criterio+"%"));
        List<Usuario> lista=criteria.list();
        getSession().getTransaction().commit();
        getSession().close();		
        return lista;		
	}

}
